SEO-панель (аналог «Теги документа») — расширение для Chrome / Edge
===================================================================

УСТАНОВКА (один раз, 1 минута)
1. Распаковать архив seo-panel.zip в любую папку, которую вы не будете удалять
   и переносить: Chrome не копирует расширение к себе, а каждый раз берёт его
   прямо из этой папки. Удалили её — расширение отвалилось.
2. Открыть Chrome → адресная строка → вставить:  chrome://extensions
   (в Edge:  edge://extensions )
3. Включить тумблер «Режим разработчика» (Developer mode) — справа сверху.
4. Нажать «Загрузить распакованное расширение» (Load unpacked).
5. Выбрать ту самую папку, куда вы распаковали архив — внутри неё должны лежать
   manifest.json, background.js и content.js.
6. Расширение появится в списке. Нажать на «пазл» справа от адресной строки
   и закрепить (значок булавки) — чтобы иконка всегда была видна.

КАК ПОЛЬЗОВАТЬСЯ
- Открыть любую страницу сайта → нажать на иконку расширения.
- Сверху появится панель. Повторный клик по иконке (или «✕») — закрыть.

ВКЛАДКИ С ОШИБКАМИ МОРГАЮТ КРАСНЫМ
Если на вкладке есть ошибки, её кнопка мигает красным и рядом появляется ⚠ и число.
Открыла вкладку — мигание прекращается. Внутри вкладки ошибки собраны в красную рамку
списком, а проблемные строки подсвечены.
Моргать умеют: Обзор (нет title/description, H1 не один, noindex, нет viewport,
чужой canonical), Заголовки (нет H1, несколько H1, пропущен уровень, пустой заголовок),
Картинки (нет alt / пустой alt), Мета и микроразметка (ошибки JSON-LD),
Текст (переспам, скрытый текст), Исходный код (незакрытые теги).

ЧТО ПОКАЗЫВАЕТ
Обзор:
  Title и Description с длиной (красным — если короче/длиннее нормы),
  Keywords, H1 (красным, если их не 1), canonical (сверяется с текущим URL),
  meta robots (красным при noindex/nofollow), lang, charset, viewport,
  количество H1–H6, ссылок (внутр./внеш./nofollow), картинок и без alt,
  объём текста и HTML, число скриптов и HTML-комментариев,
  наличие микроразметки, OG-тегов, hreflang, предупреждение о скрытом тексте.
Заголовки: все H1–H6 списком по порядку, отдельной колонкой — ошибка (пропущен уровень,
  пустой заголовок). Клик по заголовку — подсветит его на странице.
Ссылки: внутренние и внешние отдельно, с анкорами и rel. Клик по анкору — подсветит ссылку.
Картинки: тремя группами — сначала БЕЗ alt (ошибка), потом с пустым alt (годится только
  для картинок-украшений), потом с заполненным. В каждой: размер, alt, title, файл.
Мета и микроразметка: Open Graph, hreflang, Microdata, а JSON-LD — блоками, которые
  раскрываются. Блок с ошибками раскрыт сразу и подписан, что не так: битый JSON (Google
  такой не прочитает вообще), нет @context или @type, не заполнены обязательные поля
  (например, у Product нет name, у Offer нет price). Рядом ссылки на валидатор Schema.org
  и Rich Results Google.
Исходный код: код, который отдал сервер (то же самое видит поисковый робот, а не то, что
  дорисовал JS). Сверху — список незакрытых и лишних тегов с номерами строк, клик по номеру
  прокручивает к строке; проблемные строки подсвечены красным. Теги, которые по стандарту
  можно не закрывать (p, li, td и т.п.), за ошибку не считаются.
  Кодировка страницы определяется сама (koi8-r, windows-1251, utf-8) — кракозябр не будет;
  какая именно вышла, написано в шапке вкладки.
Текст: объём, доля текста в HTML, частотность слов (розовым — доля выше 3%, риск переспама),
  скрытый текст, весь видимый текст страницы.
  Скрытый текст делится на два списка: подозрительный (спрятан стилями, не похож на меню —
  вот из-за него вкладка и моргает) и «Скрыто интерфейсом» (выпадающие меню, табы, слайдеры,
  модалки, мобильная версия) — это норма, за спам не считается и в ошибки не идёт.
Скорость: те же данные, что на pagespeed.web.dev (берутся из официального API Google).

ВКЛАДКА «СКОРОСТЬ» — ПОДРОБНО
- Выбрать «Мобильные» или «Компьютер» → «Проверить скорость». Ждать 20–40 секунд:
  Google в этот момент сам загружает страницу у себя и меряет её.
- Что покажет:
  четыре оценки от 0 до 100 (Скорость, SEO, Доступность, Практики) и снимок экрана,
    каким Google увидел страницу;
  замер Google в лаборатории: FCP, LCP, TBT, CLS, индекс скорости;
  живые данные Chrome (это то, что реально видели посетители за 28 дней) —
    по самой странице и по сайту целиком, с вердиктом «проходит / не проходит»;
  ЧЕТЫРЕ СПИСКА ПРОБЛЕМ — Скорость, SEO, Практики, Доступность. Проблемы идут по убыванию
    выигрыша. Нажми на строку — она раскроется, и внутри будет:
      «Где править» (жёлтым) — понятное объяснение своими словами, что это и к кому идти;
      пояснение самого Google;
      таблица с конкретикой: какие файлы, картинки, скрипты или элементы виноваты,
      сколько весят и сколько лишнего (длинные адреса сокращены, показываются первые 15);
  «Что именно нашлось на странице» — главный элемент первого экрана (по нему меряется LCP),
    прыгающие при загрузке элементы, сторонние сервисы (счётчики, чаты, виджеты) с их
    временем блокировки, разбивка работы браузера, все запросы страницы;
  «Копировать результат» — в буфер уходит весь свод: оценки, метрики и полный список
    проблем с пояснениями «где править». Можно сразу вставлять в отчёт клиенту.
- Страница должна быть доступна из интернета: localhost и страницы за паролем Google не увидит.
- Цвета: зелёный — норма, жёлтый — на грани, красный — плохо.

КЛЮЧ GOOGLE API (нужен один раз, бесплатно, карта не нужна)
Без ключа запросы идут через общий проект Google, и его дневной лимит быстро кончается —
тогда вылезает «Quota exceeded ... Queries per day». Со своим ключом лимит 25 000 проверок
в день. Ключ ОДИН на все сайты и всех клиентов: «проект» в Google Cloud — это не сайт
клиента, а просто папка в твоём гугл-аккаунте, к которой привязан лимит.

1. Открыть https://console.cloud.google.com , войти своим гугл-аккаунтом.
   (Не грузится — включить VPN.)
2. Вверху, рядом с надписью Google Cloud — список проектов → «Создать проект».
   Имя любое, например seo-panel. Создать, подождать полминуты и проверить,
   что вверху выбран именно он.
3. Открыть https://console.cloud.google.com/apis/library/pagespeedonline.googleapis.com
   → синяя кнопка «Включить» (Enable).
4. Открыть https://console.cloud.google.com/apis/credentials
   → «Создать учётные данные» → «Ключ API». Скопировать строку вида AIzaSy...
5. ВАЖНО, иначе будет ошибка «Requests from referer <empty> are blocked»:
   нажать на название ключа (или карандаш справа) и настроить:
     «Ограничения приложений» (Application restrictions) → поставить «Нет» (None).
       Ограничение «Сайты» / HTTP-referrer НЕ ГОДИТСЯ: запрос уходит из фонового
       процесса расширения, сайта-источника у него нет, и Google такой запрос отбивает.
     «Ограничения API» (API restrictions) → «Ограничить ключ» → отметить только
       PageSpeed Insights API. Это для безопасности: даже если ключ утечёт,
       ничего другого им сделать нельзя.
   Сохранить. Настройки подхватываются не сразу — подождать 1–2 минуты.
6. Вставить ключ в поле «Ключ Google API» на вкладке «Скорость» → «Проверить скорость».
   Ключ запоминается, второй раз вводить не надо. На другом компьютере или в другом
   браузере вписать тот же самый ключ заново.

ЧАСТЫЕ ОШИБКИ ВО ВКЛАДКЕ «СКОРОСТЬ»
  «Quota exceeded ... Queries per day» — кончился общий лимит Google. Завести свой ключ (выше).
  «Requests from referer <empty> are blocked» — у ключа стоит ограничение по сайтам.
      Снять его: «Ограничения приложений» → «Нет» (пункт 5 выше).
  «API key not valid» — ключ скопирован с лишним пробелом или проект другой.
  «Lighthouse returned error» / «не удалось загрузить страницу» — Google не смог открыть адрес:
      сайт лежит, закрыт паролем, доступен только через VPN или это localhost.

КНОПКИ СПРАВА В ПАНЕЛИ
  robots.txt, sitemap.xml — открыть файлы этого сайта
  PageSpeed — скорость страницы
  Валидатор разметки / Rich Results — проверка микроразметки
  «↓ вниз» — перенести панель к низу экрана
  «Копировать отчёт» — весь свод в буфер обмена (вставить в документ)

ЕСЛИ ЧТО-ТО ПОМЕНЯТЬ
content.js в этой папке — файл СОБРАННЫЙ, а не написанный руками. Он делается
из одного исходника сразу в две цели: это расширение и скрипт-закладку, которая
открывает ту же панель на любой странице без установки.

Поэтому у нас порядок такой:
1. Править исходник panel/istochnik/panel.js — в нём вся панель целиком.
   Если правка касается только расширения (хранилище, вкладка «Скорость») —
   panel/istochnik/sreda-rasshirenie.js; только закладки — sreda-veb.js.
2. Пересобрать:  php panel/istochnik/sborka.php ustanovit
   Соберутся обе цели, переупакуется архив и обновится установленная копия.
3. На chrome://extensions нажать кружок «Обновить» на карточке расширения
   и перезагрузить страницу сайта.

Правка прямо в content.js живёт только до следующей сборки: та перезаписывает
файл целиком, и от правки не остаётся следа.

Если у вас на руках один архив, без исходников, — правьте content.js прямо
в распакованной папке и жмите «Обновить» (пункт 3). Ваша копия ничем
не пересобирается, так что правка никуда не денется.
